#!/usr/bin/env python
# encoding: utf-8
'''
@author: Excelsiorly
@license: (C) Copyright 2022, All Rights Reserved.
@contact: excelsiorly@qq.com
@file: 121. 买卖股票的最佳时机.py
@time: 2022/1/6 20:55
@desc:
    - 给定一个数组 prices ，它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
      你只能选择 某一天 买入这只股票，并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
      返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润，返回 0 。
    - https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
    - Ot(N), Os(1)
'''
class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        profit = 0
        n = len(prices)
        minprice = 1e9
        for p in prices:
            profit = max(p - minprice, profit)
            minprice = min(minprice, p)
        return profit